version control system design